package fr.upstlse.glre.client.administration.communiquer;

import java.util.List;

import com.extjs.gxt.ui.client.Events;
import com.extjs.gxt.ui.client.Style;
import com.extjs.gxt.ui.client.binder.DataListBinder;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.ModelStringProvider;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.Info;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.google.gwt.user.client.rpc.AsyncCallback;

import fr.upstlse.glre.client.RfgConstante;
import fr.upstlse.glre.client.administration.communiquer.action.InitListActionAdapter;
import fr.upstlse.glre.client.constante.RfgConstanteEnum;
import fr.upstlse.glre.client.espacededie.commun.utilisateur.AbstractListeUtilisateurs;
import fr.upstlse.glre.client.utilitaires.ControlerUtil;
import fr.upstlse.glre.client.vo.user.UserVOGWT;
import fr.upstlse.glre.client.widgets.modelData.UserModelData;

public class Communiquer extends AbstractListeUtilisateurs {

	
	public Communiquer() {
		super();
		instance = this;
	}

	@Override
	protected void initList() {
		final MessageBox lAttente = MessageBox.wait("Chargement",
				"Chargement des utilisateurs...", "Veuillez patienter");
		AsyncCallback<List<UserVOGWT>> lCallbackUsers = new AsyncCallback<List<UserVOGWT>>() {

			public void onFailure(Throwable pCaught) {
				MessageBox.alert(
						"Erreur getAllUser ", pCaught.getMessage(), null);
			}

			public void onSuccess(List<UserVOGWT> pResult) {
				lAttente.hide();
				lAttente.hide();
				userVOGWTs = pResult;

				final ListStore<UserModelData> lStore = new ListStore<UserModelData>();
				lStore.add(UserModelData.toUserModelDatas(userVOGWTs));
				binder = new DataListBinder<UserModelData>(
						listeUserPanel, lStore);
				binder
						.setDisplayProperty(RfgConstante.USER_MODELDATA_LOGIN);
				binder
						.setStringProvider(new ModelStringProvider<ModelData>() {

							public String getStringValue(ModelData model,
									String property) {
								String lTexte = (String) model
										.get(RfgConstante.USER_MODELDATA_LOGIN);
								lTexte += " ("
										+ (String) model
												.get(RfgConstante.USER_MODELDATA_ROLE)
										+ ")";
								return lTexte;
							}

						});
				binder.init();
				listeUserPanel.addListener(Events.SelectionChange,
						iUserSelectionAction);

				// final ComboBox lFilterComboBox = createFilterComboBox();
				// lFilterComboBox.addListener(Events.Select,
				// new FilterSelectionAction(Telecharger.getInstance(),
				// lStore, filter, lFilterComboBox));
				//
				//telechargerContentPanel.getHeader().addTool(lFilterComboBox
				// );
				// telechargerContentPanel.add(lFilterComboBox);
				Info.display("Information",
						"Succès du chargement des utilisateurs", "");
			}
		};
		ControlerUtil.getUserControlerServiceAsyncInstance().getAllUser(lCallbackUsers);
	}

	@Override
	protected void initContentPanel() {
		final Button lAfficherUtilisateurs = new Button();
		lAfficherUtilisateurs
				.setText(RfgConstanteEnum.LISTEUSER_BUTTON_AFFICHER.getValue());
		lAfficherUtilisateurs
				.addSelectionListener(new InitListActionAdapter());
		listeUserContentPanel.setButtonAlign(Style.HorizontalAlignment.CENTER);
		listeUserContentPanel.addButton(lAfficherUtilisateurs);
	}
}
